package com.qinyh.util;

import java.util.ArrayList;
import java.util.List;

import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;

public class TextSplitUtil {
	public static List<String> splitPage(String content, int width, int height,
			int size) {
		Paint mPaint = new Paint();
		mPaint.setTextSize(size);
		mPaint.measureText("H");
		FontMetrics fm = mPaint.getFontMetrics();// 得到系统默认字体属性
		int mFontHeight = (int) (Math.ceil(fm.descent - fm.ascent));// 获得字体高度
		int count = content.length();// 字符的个数
		char ch;// 循环变量的存放
		int w = 0;// 当前字符x轴所在的坐标值
		int rowCount = height / mFontHeight-1;// 一页中的行数
		int tmpcount=0;//到多少行了
		StringBuffer sb = new StringBuffer();//用于存放临时字符串
		List<String> mString = new ArrayList<String>();//用于存放返回的字符串
		for (int i = 0; i < count; i++) {
			ch = content.charAt(i);
			sb.append((char)ch);
			float[] widths = new float[1];
			String str = String.valueOf(ch);
			mPaint.getTextWidths(str, widths);// 得到宽度
			if (ch ==8233||ch=='\r') {
				tmpcount++;// 真实的行数加一
				if(tmpcount==rowCount){
					mString.add(sb.toString());
					sb.delete(0, sb.length());
					tmpcount=0;
				}
				w = 0;
			} 
			else {
				w += (int) Math.ceil(widths[0]);
				if (w > width) {
					tmpcount++;// 真实的行数加一
					if(tmpcount==rowCount){
						mString.add(sb.toString());
						sb.delete(0, sb.length());
						tmpcount=0;
					}
					i--;
					w = 0;
				} else {
					if (i == count - 1) {
						tmpcount++;// 真实的行数加一
						if(tmpcount==rowCount){
							mString.add(sb.toString());
							sb.delete(0, sb.length());
							tmpcount=0;
						}
					}
				}
			}
		}
		mString.add(sb.toString());
		mString = new ArrayList<String>();
		mString.add(content);
		return mString;
	}
	public static int getSplitPageOffset(String content, int width, int height,
			int size) {
		Paint mPaint = new Paint();
		mPaint.setTextSize(size);
		mPaint.measureText("H");
		FontMetrics fm = mPaint.getFontMetrics();// 得到系统默认字体属性
		int mFontHeight = (int) (Math.ceil(fm.descent - fm.ascent));// 获得字体高度
		int count = content.length();// 字符的个数
		char ch;// 循环变量的存放
		int w = 0;// 当前字符x轴所在的坐标值
		int rowCount = height / mFontHeight-1;// 一页中的行数
		int i=0;
		int tmpcount=0;//到多少行了
		for (; i < count; i++) {
			ch = content.charAt(i);
			float[] widths = new float[1];
			String str = String.valueOf(ch);
			mPaint.getTextWidths(str, widths);// 得到宽度
			if (ch ==8233||ch=='\r') {
				tmpcount++;// 真实的行数加一
				if(tmpcount==rowCount){
					return i;
				}
				w = 0;
			} 
			else {
				w += (int) Math.ceil(widths[0]);
				if (w > width) {
					tmpcount++;// 真实的行数加一
					if(tmpcount==rowCount){
						return i;
					}
					i--;
					w = 0;
				} else {
					if (i == count - 1) {
						tmpcount++;// 真实的行数加一
						if(tmpcount==rowCount){
							return i;
						}
					}
				}
			}
		}
		return i;
	}
	public static int getReverseSplitPageOffset(String content, int width, int height,
			int size) {
		Paint mPaint = new Paint();
		mPaint.setTextSize(size);
		mPaint.measureText("H");
		FontMetrics fm = mPaint.getFontMetrics();// 得到系统默认字体属性
		int mFontHeight = (int) (Math.ceil(fm.descent - fm.ascent));// 获得字体高度
		int count = content.length();// 字符的个数
		char ch;// 循环变量的存放
		int w = 0;// 当前字符x轴所在的坐标值
		int rowCount = height / mFontHeight-1;// 一页中的行数
		int i=count-1;
		int tmpcount=0;//到多少行了
		for (; i >=0; i--) {
			ch = content.charAt(i);
			float[] widths = new float[1];
			String str = String.valueOf(ch);
			mPaint.getTextWidths(str, widths);// 得到宽度
			if (ch ==8233||ch=='\r') {
				tmpcount++;// 真实的行数加一
				if(tmpcount==rowCount){
					return i;
				}
				w = 0;
			} 
			else {
				w += (int) Math.ceil(widths[0]);
				if (w > width) {
					tmpcount++;// 真实的行数加一
					if(tmpcount==rowCount){
						return i;
					}
					i--;
					w = 0;
				} else {
					if (i == count - 1) {
						tmpcount++;// 真实的行数加一
						if(tmpcount==rowCount){
							return i;
						}
					}
				}
			}
		}
		return i;
	}
}
